TCGA BRCA


GSEA

Import DEG table

res = readRDS(paste0(dir, "TCGA_BRCA_RNAseq_TN_DEGs.rds"))

GSEA HALLMARK

library(clusterProfiler)
hallmark <- msigdbr::msigdbr(species = "Homo sapiens", category = "H") %>% 
  dplyr::select(gs_name, gene_symbol)

perform_GSEA <- function(res, ref, pvalueCutoff = 1) {
  ranking <- function(res) {
    df <- res$log2FoldChange
    names(df) <- rownames(res)
    df <- sort(df, decreasing = TRUE)
    return(df)
  }
  
  ranked.res <- ranking(res)
  set.seed(123)
  x <- clusterProfiler::GSEA(geneList = ranked.res,
                             TERM2GENE = ref,
                             pvalueCutoff = pvalueCutoff,
                             pAdjustMethod = "BH",
                             verbose = TRUE,
                             seed = TRUE)
  
  result <- x@result %>% arrange(desc(NES))
  result <- result[, c('NES', 'pvalue', 'p.adjust', 'core_enrichment', 'ID')]
  return(result)
}

# Application 
gsea.res = perform_GSEA(res = res, ref = hallmark) 
filtered_gsea = gsea.res %>% mutate(sig= ifelse(pvalue <= 0.05,"p value <= 0.05", "p value > 0.05"))

# Modified GSEA NES plot 
gsea_nes_plot =function(gsea.res, title, fontsize.x = 5, fontsize.y = 6){
  gsea.res %>% ggplot(aes(reorder(ID, NES), NES)) +
    geom_col(aes(fill=sig), color="grey1", size=0.2) +
    coord_flip() +
    labs(x="Pathway", y="Normalized Enrichment Score",
         title= "GSEA") + 
    theme_classic() +
    # scale_fill_gradient(low = '#FF0000', high = '#E5E7E9') +
    scale_fill_manual(values = c("#FF0000","grey88")) +
    theme(axis.text.x= element_text(size=fontsize.x, face = 'bold'),
          axis.text.y= element_text(size=fontsize.y, face = 'bold'), 
          axis.title =element_text(size=10)) +ggtitle(title)
}

GSEA NES plot

cond1 = "Normal Tissue"
cond2 = "Tumor"
t= paste0("DEGs from ",cond2, " / ", cond1 )
gsea_nes_plot(filtered_gsea, title = t, fontsize.x = 8, fontsize.y = 8)

GSEA NES plot (filtered)

filtered_gsea = gsea.res %>% mutate(sig= ifelse(p.adjust <= 0.05,"p value <= 0.05", "p value > 0.05"))
filtered_gsea = filtered_gsea %>% filter(sig == "p value <= 0.05")
# filtered_gsea = filtered_gsea %>% distinct(core_enrichment, .keep_all = T)
t= paste0("DEGs from ",cond2, " / ", cond1 )
gsea_nes_plot(filtered_gsea, title = t, fontsize.x = 8, fontsize.y = 8)

Info table

filtered_gsea %>% DT::datatable()

GSEA KEGG

library(clusterProfiler)
kegg <- msigdbr::msigdbr(species = "Homo sapiens", subcategory = "CP:KEGG") %>% 
  dplyr::select(gs_name, gene_symbol)

perform_GSEA <- function(res, ref, pvalueCutoff = 1) {
  ranking <- function(res) {
    df <- res$log2FoldChange
    names(df) <- rownames(res)
    df <- sort(df, decreasing = TRUE)
    return(df)
  }
  
  ranked.res <- ranking(res)
  set.seed(123)
  x <- clusterProfiler::GSEA(geneList = ranked.res,
                             TERM2GENE = ref,
                             pvalueCutoff = pvalueCutoff,
                             pAdjustMethod = "BH",
                             verbose = TRUE,
                             seed = TRUE)
  
  result <- x@result %>% arrange(desc(NES))
  # result <- result[, c('NES', 'pvalue', 'p.adjust', 'core_enrichment', 'ID')]
  return(result)
}

# Application 
gsea.res = perform_GSEA(res = res, ref = kegg) 

KEGG NES plot

cond1 = "Normal Tissue"
cond2 = "Tumor"
t= paste0("DEGs from ",cond2, " / ", cond1 )
filtered_gsea = gsea.res %>% mutate(sig= ifelse(p.adjust <= 0.05,"p value <= 0.05", "p value > 0.05"))
# filtered_gsea = filtered_gsea %>% filter(sig == "p value <= 0.05")
# filtered_gsea = filtered_gsea %>% distinct(core_enrichment, .keep_all = T)
gsea_nes_plot(filtered_gsea, title = t, fontsize.x = 8, fontsize.y = 6)

KEGG NES plot (filtered)

filtered_gsea = gsea.res %>% mutate(sig= ifelse(p.adjust <= 0.05,"p value <= 0.05", "p value > 0.05"))
filtered_gsea = filtered_gsea %>% filter(sig == "p value <= 0.05")
# filtered_gsea = filtered_gsea %>% distinct(core_enrichment, .keep_all = T)
t= paste0("DEGs from ",cond2, " / ", cond1 )
gsea_nes_plot(filtered_gsea, title = t, fontsize.x = 8, fontsize.y = 8)

Info table

filtered_gsea[, c("NES","p.adjust","core_enrichment","sig")] %>% DT::datatable()